En aquest exemple generarem un conjunt de mostres aleatòries per a posteriorment fer servir l’algoritme k-means per agrupar-les. Es crearan les mostres al voltant de dos punts concrets. Així doncs, lo lògic serà agrupar en dos clústers. Donat que inicialment, en un problema real, no es coneix quin es el número idoni de clústers k, provarem primer amb dos (el valor òptim) i posteriorment amb 4 i 8 clústers. Per a avaluar la qualitat de cada procés d’agrupació farem servir la silueta mitjana. La silueta de cada mostra avalua com de bé o malament està classificada cada mostra en el clúster al que ha estat assignada. Per això es fa servir una fórmula que té en compte la distància a les mostres del seu clúster i la distància a les mostres del clúster veí més proper.
A l’hora de provar el codi que es mostra, és important tenir en compte que les mostres es generen de forma aleatòria i també que l’algoritme k-means té una inicialització aleatòria. Així doncs, en cada execució, s’obtindran uns resultats lleugerament diferents.
Lo primer que fem es carregar la llibreria clúster que conté les funcions que es necessiten
if (!require('cluster')) install.packages('cluster')
library(cluster)
Generem les mostres de forma aleatòria prenent com a centre els punts [0,0] i [5,5].
n <- 150 # número de mostres
p <- 2 # dimensions
sigma <- 1 # Variància de la distribució
mean1 <- 0 # centre del primer grup
mean2 <- 5 # centre del segon grup
n1 <- round(n/2) # número de mostres del primer grup
n2 <- round(n/2) # número de mostres del segon grup
x1 <- matrix(rnorm(n1*p,mean=mean1,sd=sigma),n1,p)
x2 <- matrix(rnorm(n2*p,mean=mean2,sd=sigma),n2,p)
Ajuntem totes les mostres generades i les mostrem en una gràfica
x <- rbind(x1,x2)
plot (x, xlab="Grup 1", ylab="Grup 2")
Com es pot comprovar les mostres estan clarament separades en dos grups. Si es vol complicar el problema es pot modificar els punts centrals (mean1 i mean2) fent que estiguin més propers i/o ampliar la Variància (sigma) per a que les mostres estiguin més disperses.
A continuació aplicarem l’algoritme k-means amb 2, 4 i 8 clústers
fit2 <- kmeans(x, 2)
y_cluster2 <- fit2$cluster
fit4 <- kmeans(x, 4)
y_cluster4 <- fit4$cluster
fit8 <- kmeans(x, 8)
y_cluster8 <- fit8$cluster
Les variables y_cluster2, y_cluster4 i y_cluster8 contenen per a cada mostra l’identificador del clúster a les que han estat assignades. Per exemple, en el cas dels k=2 les mostres s’han assignat al clúster 1 o al 2.
y_cluster2
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [149] 2 2
Per a visualitzar els clústers podem fer servir la funció clusplot. Mirem l’agrupació amb 2 clústers i observem pràcticament no hi ha valors extrems i realment els dos clústers generats són homogenis.
clusplot(x, fit2$cluster, color=TRUE, shade=TRUE, labels=2, lines=0)
amb 4 observem com el clúster de l’esquerra l’ha dividit en tres.
clusplot(x, fit4$cluster, color=TRUE, shade=TRUE, labels=2, lines=0)
i amb 8. L’algoritme fa cas al que se li demana i ens genera 8 clústers tot i que visualment ja es veu que el resultat no és massa consistent.
clusplot(x, fit8$cluster, color=TRUE, shade=TRUE, labels=2, lines=0)
També podem visualitzar el resultat del procés d’agrupament amb el següent codi per al cas de 2 clústers. L’ús de colors facilita la identificació visual de clústers.
plot(x[y_cluster2==1,],col='blue', xlim=c(min(x[,1]), max(x[,1])), ylim=c(min(x[,2]), max(x[,2])), xlab = "Dimensió 1", ylab = "Dimensió 2")
points(x[y_cluster2==2,],col='red')
per a 4
plot(x[y_cluster4==1,],col='blue', xlim=c(min(x[,1]), max(x[,1])), ylim=c(min(x[,2]), max(x[,2])), xlab = "Dimensió 1", ylab = "Dimensió 2")
points(x[y_cluster4==2,],col='red')
points(x[y_cluster4==3,],col='green')
points(x[y_cluster4==4,],col='black')
i per a 8
plot(x[y_cluster8==1,],col='blue', xlim=c(min(x[,1]), max(x[,1])), ylim=c(min(x[,2]), max(x[,2])), xlab = "Dimensió 1", ylab = "Dimensió 2")
points(x[y_cluster8==2,],col='red')
points(x[y_cluster8==3,],col='green')
points(x[y_cluster8==4,],col='black')
points(x[y_cluster8==5,],col='yellow')
points(x[y_cluster8==6,],col='purple')
points(x[y_cluster8==7,],col='cyan')
points(x[y_cluster8==8,],col='orange')
Ara avaluarem la qualitat de l’agregació. Per això farem servir la funció silhouette que calcula la silueta de cada mostra
d <- daisy(x)
sk2 <- silhouette(y_cluster2, d)
sk4 <- silhouette(y_cluster4, d)
sk8 <- silhouette(y_cluster8, d)
La funció silhouette retorna per a cada mostra, el clúster on ha estat assignat, el clúster veí i el valor de la silueta. Així doncs, calculant la mitjana de la tercera columna podem obtenir una estimació de la qualitat de l’agrupament.
mean(sk2[,3])
## [1] 0.744045
mean(sk4[,3])
## [1] 0.3551085
mean(sk8[,3])
## [1] 0.3207444
Com es pot comprovar, agrupar en dos clústers es millor que en 4 o en 8, lo qual es lògic tenint en compte com s’han generat les dades.
Una bona pràctica alhora d’entendre millor el joc de dades, consisteix en posar nom a cadascun dels clústers identificats. Ho veurem més clarament en el següent exemple que parteix de dades reals.
A continuació estudiarem un altre exemple de com es fan servir els models d’agregació. Per a això farem servir el joc de dades penguins contingut en el paquet R palmerpenguins. Aquest joc de dades es troba descrit a https://cran.r-project.org/web/packages/palmerpenguins/index.html i conté medicions de grandària, observacions de postes i proporcions d’isòtops sanguinis de tres espècies de pingüins observades en tres illes de l’arxipèlag Palmer, a l’Antàrtida, durant un període d’estudi de tres anys.
Aquest dataset està prèviament treballat perquè les dades estiguin netes i sense errors. Si no és així abans de res hauríem de buscar errors, valors nuls o outliers. Hauríem tractar de discretitzar o eliminar columnes. Fins i tot realitzar aquest últim pas diverses vegades per comprovar els diferents resultats i triar el que millor rendiment ens doni. De totes maneres conté algun valor nul que procedirem a ignorar.
Procedim a visualitzar l’estructura i resum del joc de dades.
if (!require('palmerpenguins')) install.packages('palmerpenguins')
library(palmerpenguins)
# palmerpenguins::penguins
summary(penguins)
## species island bill_length_mm bill_depth_mm
## Adelie :152 Biscoe :168 Min. :32.10 Min. :13.10
## Chinstrap: 68 Dream :124 1st Qu.:39.23 1st Qu.:15.60
## Gentoo :124 Torgersen: 52 Median :44.45 Median :17.30
## Mean :43.92 Mean :17.15
## 3rd Qu.:48.50 3rd Qu.:18.70
## Max. :59.60 Max. :21.50
## NA's :2 NA's :2
## flipper_length_mm body_mass_g sex year
## Min. :172.0 Min. :2700 female:165 Min. :2007
## 1st Qu.:190.0 1st Qu.:3550 male :168 1st Qu.:2007
## Median :197.0 Median :4050 NA's : 11 Median :2008
## Mean :200.9 Mean :4202 Mean :2008
## 3rd Qu.:213.0 3rd Qu.:4750 3rd Qu.:2009
## Max. :231.0 Max. :6300 Max. :2009
## NA's :2 NA's :2
Com es pot comprovar, aquesta base de dades està pensada per a problemes de classificació supervisada que pretén classificar cada tipus de pingüí en una de les tres classes o espècies existents (Adelie, Gentoo o Chinstrap). Com en aquest exemple farem servir un mètode no supervisat, transformarem el problema supervisat original en un no supervisat . Per aconseguir-ho no farem servir la columna species, que és la variable que es vol predir. Per tant, intentarem trobar agrupacions usant únicament els quatre atributs numèrics que caracteritzen cada espècie de pingüí.
Carreguem les dades i ens quedem únicament amb les quatre columnes que defineixen a cada espècie.
x <- na.omit(penguins[,3:6])
En aquest cas hem plantejat un exemple més realista i per tant inicialment no coneixem el número òptim de clústers. Comencem provant amb varis valors.
d <- daisy(x)
resultados <- rep(0, 10)
for (i in c(2,3,4,5,6,7,8,9,10))
{
fit <- kmeans(x, i)
y_cluster <- fit$cluster
sk <- silhouette(y_cluster, d)
resultados[i] <- mean(sk[,3])
}
Mostrem en una gràfica els valors de la silueta mitja de cada prova per comprovar quin número de clusters és el millor.
plot(2:10,resultados[2:10],type="o",col="blue",pch=0,xlab="Número de clusters",ylab="Silueta")
Tot i que un esperaria obtenir un valor òptim per a k = 3, sembla que del gràfic es desprèn que es millor k = 4 o fins i tot k = 5.
Un altre forma d’avaluar quin és el millor nombre de clústers és considerar el millor model, aquell que ofereix la menor suma dels quadrats de les distàncies dels punts de cada grup respecte al seu centre (withinss), amb la major separació entre centres de grups (betweenss). Com es pot comprovar és una idea conceptualment similar a la silueta. Una manera comuna de fer la selecció del nombre de clústers consisteix a aplicar el mètode elbow (colze), que no és més que la selecció del nombre de clústers d’acord amb la inspecció de la gràfica que s’obté al iterar amb el mateix conjunt de dades per a diferents valors de nombre de clústers. S’ha de seleccionar el valor que es troba en el “colze” de la corba.
resultados <- rep(0, 10)
for (i in c(2,3,4,5,6,7,8,9,10))
{
fit <- kmeans(x, i)
resultados[i] <- fit$tot.withinss
}
plot(2:10,resultados[2:10],type="o",col="blue",pch=0,xlab="Nombre de clústers",ylab="tot.tot.withinss")
En aquest cas el número òptim de clústers es 4, que és quan la corba comença a estabilitzar-se.
També es pot fer servir la funció kmeansruns del paquet fpc que executarà l’algoritme kmeans com un conjunt de valors i seleccionarà el valor del número de clústers que millor funcioni d’acord amb dos criteris: la silueta mitja (asw) i Calinski-Harabasz (“ch”).
if (!require('fpc')) install.packages('fpc'); library('fpc')
fit_ch <- kmeansruns(x, krange = 1:10, criterion = "ch")
fit_asw <- kmeansruns(x, krange = 1:10, criterion = "asw")
Podem comprovar el valor amb el que s’ha obtingut el millor resultat i també mostrar el resultat obtingut per a tots els valors de k fent servir tots dos criteris.
fit_ch$bestk
## [1] 10
fit_asw$bestk
## [1] 2
plot(1:10,fit_ch$crit,type="o",col="blue",pch=0,xlab="Número de clústers",ylab="Criteri Calinski-Harabasz")
plot(1:10,fit_asw$crit,type="o",col="blue",pch=0,xlab="Número de clústers",ylab="Criteri silueta mitja")
Els resultats son molt semblants als que hem obtingut anteriorment. Amb el criteri de la silueta mitja s’obtenen dos clústers i amb el Calinski-Harabasz s’obtenen 3.
Com s’ha comprovat, conèixer el número òptim de clústers no és un problema fàcil. Tampoc ho és la visualització dels models d’agregació.
Com en el cas que estudiem sabem que les dades poden ser agrupades en 3 classes, vegem com es comporta el kmeans en aquest cas. Per això comparem visualment els camps dos a dos, amb el valor real que sabem està emmagatzemat en el camp class del dataset original.
(Aclarim que òbviament no acostuma a passar que coneguem de forma prèvia el nombre de clústers òptim. Aquest exemple el plantegem amb finalitats didàctiques i amb voluntat d’experimentar)
penguins3clusters <- kmeans(x, 3)
# bill_lLength y bill_depth
plot(x[c(1,2)], col=penguins3clusters$cluster, main="Classificació k-means")
plot(x[c(1,2)], col=as.factor(penguins$species), main="Classificació real")
Podem observar que flipper_length i body_mass no són bons indicadors per diferenciar a les tres subespècies, atès que dues de les subespècies estan massa barrejades per poder diferenciar res.
# flipper_length y body_mass
plot(x[c(3,4)], col=penguins3clusters$cluster, main="Classificació k-means")
plot(x[c(3,4)], col=as.factor(penguins$species), main="Classificació real")
# bill_length y flipper_length
plot(x[c(1,3)], col=penguins3clusters$cluster, main="Classificació k-means")
plot(x[c(1,3)], col=as.factor(penguins$species), main="Classificació real")
Les dues mesures de bill semblen aconseguir millors resultats al dividir les tres espècies de pingüins. El grup format pels punts negres que ha trobat l’algoritme coincideix amb els de l’espècie Adelie. Els altres dos grups però es barregen més, i hi ha certs punts que es classifiquen com Gentoo (verd) quan en realitat són Chinstrap (vermell).
Una bona tècnica que ajuda a entendre els grups que s’han format, és mirar de donar-los un nom. Com per exemple:
Això ens ajuda a entendre com estan formats els grups i a referir-nos a ells en anàlisis posteriors.
Tot plegat ens indica que establir el nombre de grups o clústers en un joc de dades no és un aspecte que puguem assegurar que sempre encertarem amb precisió i a més ho farem de forma objectiva, ven al contrari és un àmbit d’estudi que requereix d’anàlisi en si mateix.
Us deixem en el següent enllaç un material didàctic complementari que
us pot ajudar a aprofundir en el tema de la selecció del nombre clúster
més adequat per a un joc de dades:
datascience.recursos.uoc.edu
Com a continuació de l’estudi podríem seguir experimentant combinant en gràfics similars als anteriors. En definitiva es tractaria en aquest punt d’aprofundir més en el coneixement de les propietats de les diferents característiques o columnes de el joc de dades.
En el següent exemple treballarem els algoritmes DBSCAN i OPTICS com a mètodes de clustering que permeten la generació de grups no radials a diferència de k-means. Veurem que el seu paràmetre de entrada més rellevant és minPts que defineix la mínima densitat acceptada al voltant d’un centroide.
Incrementar aquest paràmetre ens permetrà reduir el soroll (observacions no assignades a cap clúster), en qualsevol cas començarem per construir el nostre propi joc de dades en el que dibuixarem 4 zones de punts diferenciades.
if (!require('dbscan')) install.packages('dbscan'); library('dbscan')
set.seed(2)
n <- 400
x <- cbind(
x = runif(4, 0, 1) + rnorm(n, sd=0.1),
y = runif(4, 0, 1) + rnorm(n, sd=0.1)
)
plot(x, col=rep(1:4, time = 100))
Una de las primeres activitats que realitza l’algoritme és ordenar les observacions de forma que els punts més propers es converteixin en veïns en l’ordenament. Es podria pensar com una representació numèrica del dendograma d’una agrupació jeràrquica.
### Executem l'algoritme OPTICS deixant el paràmetre eps amb el seu valor per defecte i fixant el criteri de veïnatge en 10
res <- optics(x, minPts = 10)
res
## OPTICS ordering/clustering for 400 objects.
## Parameters: minPts = 10, eps = 0.193786846197958, eps_cl = NA, xi = NA
## Available fields: order, reachdist, coredist, predecessor, minPts, eps,
## eps_cl, xi
### Obtenim la ordenació de les observacions o punts
res$order
## [1] 1 363 209 349 337 301 357 333 321 285 281 253 241 177 153 57 257 29
## [19] 77 169 105 293 229 145 181 385 393 377 317 381 185 117 101 9 73 237
## [37] 397 369 365 273 305 245 249 309 157 345 213 205 97 49 33 41 193 149
## [55] 17 83 389 25 121 329 5 161 341 217 189 141 85 53 225 313 289 261
## [73] 221 173 69 61 297 125 81 133 129 197 109 137 59 93 165 89 21 13
## [91] 277 191 203 379 399 375 351 311 235 231 227 71 11 299 271 291 147 55
## [109] 23 323 219 275 47 263 3 367 331 175 87 339 319 251 247 171 111 223
## [127] 51 63 343 303 207 151 391 359 287 283 215 143 131 115 99 31 183 43
## [145] 243 199 79 27 295 67 347 255 239 195 187 139 107 39 119 179 395 371
## [163] 201 123 159 91 211 355 103 327 95 7 167 35 267 155 387 383 335 315
## [181] 259 135 15 113 279 373 4 353 265 127 45 37 19 276 224 361 260 288
## [199] 336 368 348 292 268 252 120 108 96 88 32 16 340 156 388 372 356 332
## [217] 304 220 188 168 136 124 56 236 28 244 392 184 76 380 232 100 116 112
## [235] 256 72 8 280 64 52 208 172 152 148 360 352 192 160 144 284 216 48
## [253] 84 92 36 20 212 272 264 200 128 80 180 364 196 12 132 40 324 308
## [271] 176 164 68 316 312 384 300 344 328 248 204 140 296 24 320 228 60 44
## [289] 233 65 400 376 240 163 104 396 307 75 14 325 269 262 234 382 294 206
## [307] 198 374 310 362 318 386 358 330 278 210 298 282 122 98 34 26 174 142
## [325] 46 6 62 118 190 202 114 322 286 38 242 394 342 266 162 130 30 182
## [343] 2 74 314 290 246 194 170 126 158 378 350 254 226 214 70 18 10 366
## [361] 354 186 150 86 306 102 338 346 134 250 138 94 78 390 274 58 42 258
## [379] 66 90 146 370 222 218 326 82 110 270 334 178 166 398 22 50 238 106
## [397] 154 302 230 54
Un altre pas molt interessant de l’algoritme és la generació d’un diagrama d’accessibilitat o reachability plot, en el que s’aprecia d’una forma visual la distància d’accessibilitat de cada punt.
Les valls representen clústers (com més profund és la vall, més dens és el clúster), mentre que els cims indiquen els punts que estan entre les agrupacions (aquests punts són candidats a ser considerats outliers)
### Gràfic d'accessibilitat
plot(res)
Vegem una altra representació del diagrama d’accessibilitat, on podem observar les traces de les distàncies entre punts propers del mateix clúster i entre clústers diferents.
### Dibuixem les traces que relacionen punts
plot(x, col = "grey")
polygon(x[res$order,])
Un altre exercici interessant a realitzar és extraure una agrupació de la ordenació realitzada per OPTICS similar a lo que DBSCAN hagués generat establint el paràmetre eps en eps_cl = 0.065. En aquest sentit convidem l’estudiant a experimentar amb diferents valors d’aquest paràmetre.
### Extracció d'un clústering DBSCAN tallant l'accessibilitat en el valor eps_cl
res <- extractDBSCAN(res, eps_cl = .065)
res
## OPTICS ordering/clustering for 400 objects.
## Parameters: minPts = 10, eps = 0.193786846197958, eps_cl = 0.065, xi = NA
## The clustering contains 4 cluster(s) and 92 noise points.
##
## 0 1 2 3 4
## 92 81 84 72 71
##
## Available fields: order, reachdist, coredist, predecessor, minPts, eps,
## eps_cl, xi, cluster
plot(res) ## negre indica soroll
Observem en el gràfic anterior com s’han pintat de color els 4 clústers i en negre es mantenen els valors outliers o extrems.
Seguim endavant amb una representació gràfica que ens mostra els clústers mitjançant formes convexes.
hullplot(x, res)
Repetim l’experiment anterior incrementant el paràmetre epc_c, vegem com l’efecte que produeix és la concentració de clústers ja que flexibilitzem la condició de densitat
### Incrementem el paràmetre eps
res <- extractDBSCAN(res, eps_cl = .1)
res
## OPTICS ordering/clustering for 400 objects.
## Parameters: minPts = 10, eps = 0.193786846197958, eps_cl = 0.1, xi = NA
## The clustering contains 2 cluster(s) and 9 noise points.
##
## 0 1 2
## 9 295 96
##
## Available fields: order, reachdist, coredist, predecessor, minPts, eps,
## eps_cl, xi, cluster
plot(res)
hullplot(x, res)
Vegem ara una variant de la extracció DBSCN anterior. En ella el paràmetre xi ens servirà per a classificar els clústers en funció del canvi en la densitat relativa dels mateixos.
### Extracció del clustering jeràrquic en funció de la variació de la densitat pel mètode xi
res <- extractXi(res, xi = 0.05)
res
## OPTICS ordering/clustering for 400 objects.
## Parameters: minPts = 10, eps = 0.193786846197958, eps_cl = NA, xi = 0.05
## The clustering contains 7 cluster(s) and 1 noise points.
##
## Available fields: order, reachdist, coredist, predecessor, minPts, eps,
## eps_cl, xi, cluster, clusters_xi
plot(res)
hullplot(x, res)
Els exercicis es realitzaran sobre la base del joc de dades Hawks present en el paquet R Stat2Data.
Els estudiants i el professorat del Cornell College a Mount Vernon, Iowa, van recollir dades durant molts anys al mirador de falcons de l’estany MacBride, prop d’Iowa City, a l’estat d’Iowa. El joc de dades que analitzem aquí és un subconjunt del conjunt de dades original, utilitzant només aquelles espècies per a les que hi havia més de 10 observacions. Les dades es van recollir en mostres aleatòries de tres espècies diferents de falcons: Cua-roja, Esparver i Falcó de Cooper.
Hem seleccionat aquest joc de dades per la seva semblança amb el joc de dades penguins i pel seu potencial alhora d’aplicar-li algoritmes de mineria de dades no supervisats. Les variables numèriques en què us basareu són: Wing, Weight, culmen, Hallux
if (!require('Stat2Data')) install.packages('Stat2Data'); library('Stat2Data')
data("Hawks")
summary(Hawks)
## Month Day Year CaptureTime ReleaseTime
## Min. : 8.000 Min. : 1.00 Min. :1992 11:35 : 14 :842
## 1st Qu.: 9.000 1st Qu.: 9.00 1st Qu.:1995 13:30 : 14 11:00 : 2
## Median :10.000 Median :16.00 Median :1999 11:45 : 13 11:35 : 2
## Mean : 9.843 Mean :15.74 Mean :1998 12:10 : 13 12:05 : 2
## 3rd Qu.:10.000 3rd Qu.:23.00 3rd Qu.:2001 14:00 : 13 12:50 : 2
## Max. :11.000 Max. :31.00 Max. :2003 13:05 : 12 13:32 : 2
## (Other):829 (Other): 56
## BandNumber Species Age Sex Wing Weight
## : 2 CH: 70 A:224 :576 Min. : 37.2 Min. : 56.0
## 1142-09240: 1 RT:577 I:684 F:174 1st Qu.:202.0 1st Qu.: 185.0
## 1142-09241: 1 SS:261 M:158 Median :370.0 Median : 970.0
## 1142-09242: 1 Mean :315.6 Mean : 772.1
## 1142-18229: 1 3rd Qu.:390.0 3rd Qu.:1120.0
## 1142-19209: 1 Max. :480.0 Max. :2030.0
## (Other) :901 NA's :1 NA's :10
## Culmen Hallux Tail StandardTail
## Min. : 8.6 Min. : 9.50 Min. :119.0 Min. :115.0
## 1st Qu.:12.8 1st Qu.: 15.10 1st Qu.:160.0 1st Qu.:162.0
## Median :25.5 Median : 29.40 Median :214.0 Median :215.0
## Mean :21.8 Mean : 26.41 Mean :198.8 Mean :199.2
## 3rd Qu.:27.3 3rd Qu.: 31.40 3rd Qu.:225.0 3rd Qu.:226.0
## Max. :39.2 Max. :341.40 Max. :288.0 Max. :335.0
## NA's :7 NA's :6 NA's :337
## Tarsus WingPitFat KeelFat Crop
## Min. :24.70 Min. :0.0000 Min. :0.000 Min. :0.0000
## 1st Qu.:55.60 1st Qu.:0.0000 1st Qu.:2.000 1st Qu.:0.0000
## Median :79.30 Median :1.0000 Median :2.000 Median :0.0000
## Mean :71.95 Mean :0.7922 Mean :2.184 Mean :0.2345
## 3rd Qu.:87.00 3rd Qu.:1.0000 3rd Qu.:3.000 3rd Qu.:0.2500
## Max. :94.00 Max. :3.0000 Max. :4.000 Max. :5.0000
## NA's :833 NA's :831 NA's :341 NA's :343
class(Hawks)
## [1] "data.frame"
Presenta el joc de dades, nom i significat de cada columna, així com les distribucions dels seus valors.
Realitza un estudi aplicant el mètode K-means, similar al dels exemples 1.1 i 1.2
str(Hawks)
## 'data.frame': 908 obs. of 19 variables:
## $ Month : int 9 9 9 9 9 9 9 9 9 9 ...
## $ Day : int 19 22 23 23 27 28 28 29 29 30 ...
## $ Year : int 1992 1992 1992 1992 1992 1992 1992 1992 1992 1992 ...
## $ CaptureTime : Factor w/ 308 levels " ","1:15","1:31",..: 181 25 138 42 62 71 181 88 261 192 ...
## $ ReleaseTime : Factor w/ 60 levels ""," ","10:20",..: 1 2 2 2 2 2 2 2 2 2 ...
## $ BandNumber : Factor w/ 907 levels " ","1142-09240",..: 856 857 858 809 437 280 859 860 861 281 ...
## $ Species : Factor w/ 3 levels "CH","RT","SS": 2 2 2 1 3 2 2 2 2 2 ...
## $ Age : Factor w/ 2 levels "A","I": 2 2 2 2 2 2 2 1 1 2 ...
## $ Sex : Factor w/ 3 levels "","F","M": 1 1 1 2 2 1 1 1 1 1 ...
## $ Wing : num 385 376 381 265 205 412 370 375 412 405 ...
## $ Weight : int 920 930 990 470 170 1090 960 855 1210 1120 ...
## $ Culmen : num 25.7 NA 26.7 18.7 12.5 28.5 25.3 27.2 29.3 26 ...
## $ Hallux : num 30.1 NA 31.3 23.5 14.3 32.2 30.1 30 31.3 30.2 ...
## $ Tail : int 219 221 235 220 157 230 212 243 210 238 ...
## $ StandardTail: int NA NA NA NA NA NA NA NA NA NA ...
## $ Tarsus : num NA NA NA NA NA NA NA NA NA NA ...
## $ WingPitFat : int NA NA NA NA NA NA NA NA NA NA ...
## $ KeelFat : num NA NA NA NA NA NA NA NA NA NA ...
## $ Crop : num NA NA NA NA NA NA NA NA NA NA ...
sapply(Hawks, function(x) c(Tipo = class(x), Valores = toString(unique(x))))
## Month
## Tipo "integer"
## Valores "9, 10, 11, 8"
## Day
## Tipo "integer"
## Valores "19, 22, 23, 27, 28, 29, 30, 5, 8, 9, 10, 11, 12, 13, 14, 17, 24, 25, 3, 16, 21, 20, 1, 4, 7, 26, 31, 18, 6, 15, 2"
## Year
## Tipo "integer"
## Valores "1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003"
## CaptureTime
## Tipo "factor"
## Valores "13:30, 10:30, 12:45, 10:50, 11:15, 11:25, 11:45, 15:35, 13:45, 12:30, 11:05, 11:00, 12:40, 14:20, 13:40, 14:50, 13:15, 12:10, 13:05, 16:05, 14:35, 12:05, 10:05, 10:45, 15:15, 10:15, 14:00, 10:08, 14:25, 15:25, 15:11, 13:50, 15:55, 12:15, 13:00, 13:20, 15:03, 11:50, 9:53, 10:25, 15:30, 13:25, 10:20, 13:35, 14:40, 9:38, 13:27, 11:35, 9:23, 14:05, 9:20, 16:35, 14:12, 10:37, 9:55, 10:40, 12:27, 9:02, 10:47, 11:24, 11:58, 10:23, 11:20, 12:58, 9:05, 9:33, 11:04, 13:55, 14:45, 11:48, 10:28, 10:54, 14:02, 8:00, 11:55, 15:40, 9:25, 11:10, 11:38, 13:02, 13:16, 10:39, 11:13, 13:07, 13:37, 15:17, 16:00, 11:23, 11:02, 12:01, 12:23, 13:10, 15:07, 8:52, 12:36, 11:30, 10:00, 12:35, 9:08, 10:46, 11:27, 12:55, 12:00, 10:12, 11:06, 11:36, 13:09, 15:00, 14:19, 9.12, 10:29, 11:39, 14:55, 9:15, 10:55, 12:24, 11:21, 11:41, 12:26, 12:20, 14:52, 11:40, 11:22, 12:47, 9:46, 15:02, 11:59, 14:42, 15:01, 15:23, 12:19, 13:33, 14:30, 9:40, 9:50, 14:58, 15:10, 10:10, 13:03, 12:50, 12:04, 12:54, 11:08, 12:02, 14:10, 9:47, 11:07, 10:58, 10:35, 11:18, 16:16, 13:06, 13:04, 11:16, 14:33, 10:56, 11:42, 11:43, 12:13, 10:19, 10:59, 13:36, 14:26, 12:25, 12:32, 12:57, 11:52, 13:17, 14:08, 9:57, 14:27, 14:21, 14:15, 12:34, 12:49, 12:16, 13:47, 14:36, 12:21, 14:22, 12:52, 11:26, 10:42, 9:45, 14:01, 10:17, 14:53, 1:31, 12:08, 15:08, 15:45, 12:12, 11:11, 14:24, 13:08, 12:31, 13:21, 10:43, 13:39, 13:11, 9:01, 9:52, 13:49, 11:29, 14:39, 15:33, 11:28, 13:56, 10:27, 10:48, 11:54, 1:15, 9:58, 9:29, 9:35, 11:34, 13:32, 13:34, 12:06, 13:18, 13:23, 11:47, 10:52, 11:56, 12:59, 15:12, 13:29, 14:38, 13:57, 12:07, 13:12, 12:14, 14:28, 13:38, 9:48, 11:46, 12:38, 9:22, 12:51, 9:21, 10:53, 12:53, 10:49, 14:49, 9:42, 13:24, 10:31, 11:57, 12:03, 11:51, 9:39, 11:03, 10:11, 14:57, 12:33, 14:29, 9:36, 10:36, 13:48, 14:03, 9:24, 12:42, 11:53, 12:48, 11:37, 9:41, 13:58, 14:23, 9:44, 10:04, 12:44, 12:39, 10:13, 13:14, 9:30, 13:26, 12:46, 8:34, 9:59, 10:34, 14:56, 11:33, 10:14, 14:16, 13:22, 12:56, 10:18, 14:06, 12:28, 10:38, 10:57, 10:44, 13:13, 9:49, 9:18, 13:51, 14:47, 10:07, 14:43, 11:17, 14:48, , 10:06, 13:01, 13:31, 14:07, 14:44, 9:56"
## ReleaseTime
## Tipo "factor"
## Valores ", , 13:26, 10:53, 14:50, 10:32, 10:20, 11:00, 12:50, 13:10, 13:45, 14:07, 11:28, 14:45, 13:36, 10:42, 11:22, 11:50, 12:07, 11:55, 12:09, 12:24, 10:50, 13:52, 14:40, 12:27, 12:41, 12:59, 13:14, 12:05, 13:32, 12:21, 14:37, 10:25, 12:13, 11:07, 13:57, 15:15, 12:00, 12:08, 12:30, 14:30, 13:25, 15:00, 11:35, 13:05, 13:20, 12:33, 14:10, 12:36, 15:03, 11:47, 12:14, 12:34, 14:34, 12:01, 11:41, 11:46, 12:49, 13:08"
## BandNumber
## Tipo "factor"
## Valores "877-76317, 877-76318, 877-76319, 745-49508, 1253-98801, 1207-55910 , 877-76320, 877-76321, 877-76322, 1207-55911, 877-76323, 877-76324, 877-76325, 1207-55917, 1207-55912, 1207-55913, 877-76326, 877-76327, 877-76328, 877-76329, 877-76330, 877-76331, 877-76332, 877-76333, 877-76334, 1173-19901, 877-76335, 1207-55914, 1253-98802, 608-48703, 1207-55915, 877-76336, 1207-55916, 1207-55918, 1207-55919, 987-53707, 1207-55920, 877-76337, 1207-55921, 173-19904, 193-19905, 120407-804, 877-76339, 877-76340, 877-76341, 877-76342, 877-76344, 877-76345, 877-76346, 877-76347, 877-76348, 877-76349, 1253-98803, 877-76350, 787-53708, 745-49512, 745-49513, 1207-55922, 1207-55923, 1207-55924, 877-76351, 877-76552, 1207-55927, 877-76353, 1173-19906, 877-76354, 745-49515, 1173-19907, 1373-35272, 877-76355, 877-76357, 877-76358, 1207-55941, 877-76359, 877-76360, 1207-55947, 877-76361, 877-76362, 1387-99101, 1387-99102, 1387-99104, 1387-99103, 1423-16201, 2003-58433, 872-09611, 1204-45804, 1387-97105, 1387-79106, 1207-64601, 1387-79107, 1387-79108, 1387-79109, 1387-79111, 1207-64602, 1207-64603, 1207-64604, 1207-64605, 2003-58435, 2003-58436, 1423-16203, 1423-16204, 1387-79112, 2003-58437, 2003-58438, 1387-79113, 1387-79114, 872-09612, 2206-35417, 1207-64606, 1207-64607, 1705-24603, 1423-16205, 1307-79115, 1387-79116, 1387-79117, 1387-79118, 1387-79119, 1387-79120, 1387-79121, 1207-64608, 872-09613, 872-09614, 1387-79122, 1207-64609, 872-09615, 1207-64610, 1207-64611, 872-09616, 2003-58439, 872-09617, 1387-79123, 1387-79124, 1207-64612, 1387-79125, 1387-79126, 1387-79127, 1387-79128, 1387-79129, 1387-79130, 1207-64613, 872-09618, 872-09619, 2003-58440, 1423-16206, 1207-64614, 1387-79131, 1387-79132, 1207-64615, 1287-79133, 1387-79134, 1387-79135, 872-09620, 1387-79136, 1387-79137, 1387-79138, 1387-79139, 1387-79140, 1387-79141, 1387-79142, 2003-58441, 1423-16207, 1387-79143, 1387-79144, 1207-64616, 1387079145, 1387-79146, 1423-16208, 2003-58442, 1387-079147, 1423-11209, 1423-16210, 2003-58443, 1387-79148, 1207-64617, 1207-64618, 2003-58444, 1387-79149, 1387-79150, 1387-79151, 1387-79152, 1387-79199, 1387-79153, 1387-79154, 1387-79155, 1387-79156, 1387-79157, 1387-79158, 1204-45805, 1207-64619, 1387-79159, 1207-64620, 1207-64621, 1387-79160, 1387-79161, 1423-16211, 872-09621, 1807-53101, 1423-16212, 1387-79162, 1387-79163, 1423-16213, 1423-16214, 1387-79164, 1807-53103, 1387-79165, 1387-79166, 1387-79167, 1387-170, 1387-79171, 1207-64623, 2003-59463, 972-09622, 2003-58464, 2003-58465, 2003-58466, 1343-78401, 1387-79173, 1343-78402, 1343-78403, 1207-64624, 1204-45806, 1387-79174, 1387-79175, 1387-79176, 1387-79177, 1207-64625, 2003-58467, 2003-58468, 1387-79178, 1807-53104, 1423-16221, 1207-64626, 1387-79179, 1705-24606, 1387-79180, 1387-79181, 1387-79182, 1387-79183, 1705-24607, 1207-64627, 1207-64628, 1207-79184, 1207-64629, 1387-79185, 1387-79186, 1207-64660, 1387-79187, 1207-64630, 1705-24608, 1387-79188, 1387-79189, 1387-79190, 1204-45807, 1387-79191, 1387-79192, 1207-64631, 1207-64632, 1387-79193, 1387-79794, 1387-79195, 1207-64634, 1387-79196, , 1387-79197, 1397-79198, 1387-79172, 1807-53105, 1423-16223, 1207-64635, 877-76379, 2107-64631, 1807-53107, 1387-79200, 877-76380, 1207-64637, 2003-58469, 1343-78405, 8777-63481, 1207-64638, 1207-64639, 8777-6382, 1807-53108, 1207-64640, 1204-45808, 1207-64641, 1207-64642, 1705-24609, 1705-24610, 1207-64643, 1387-92101, 1387-92102, 1387-92103, 1207-64644, 1387-92104, 1387-92105, 1387-92106, 1207-64645, 1705-24611, 1387-92125, 2003-58576, 1423-16276, 1387-92127, 1423-16277, 2003-58577, 2003-58578, 872-09631, 872-09633, 1387-92128, 1705-24626, 872-09634, 1423-16228, 1423-16229, 972-04635, 972-09636, 1426-16230, 1387-92129, 1202-72601, 1705-24627, 1423-16231, 872-09638, 1705-24628, 1387-92130, 1387-92131, 1387-92132, 1204-45809, 1423-16233, 1705-24629, 1423-16232, 872-09639, 1387-92133, 1207-72602, 1387-92134, 1387-92135, 1387-92136, 1387-92137, 1387-92138, 1387-92139, 1387-92140, 1423-16234, 1423-16235, 1387-92141, 1387-92142, 1387-92143, 1387-92144, 1387-92145, 1387-92146, 1387-92147, 1387-92148, 1387-92149, 1397-92150, 1423-16236, 1705-24630, 1387-92151, 1387-92152, 1387-92153, 1423-16238, 12044-5876, 1387-92154, 1423-16239, 1387-92155, 1387-92157, 1423-16278, 1387-92156, 1387-92158, 1207-72603, 1807-53127, 872-09640, 1807-53128, 1423-16240, 12044-5877, 1387-92159, 1807-53129, 1343-78476, 1423-16241, 1387-92160, 1387-92161, 1387-92162, 872-09641, 1387-92166, 1207-72604, 1207-72606, 2003-58581, 1207-72607, 1387-92173, 1142-19209, 1387-92174, 1387-92175, 1207-72608, 1387-92196, 1387-92177, 1207-72609, 1204-45878, 1423-16242, 1343-78477, 1207-72610, 1387-92178, 1387-92180, 1387-92181, 1705-24634, 1207-72611, 1207-72612, 9387-92182, 1343-78478, 1387-92183, 1207-72613, 1807-53130, 1387-92184, 1207-726114, 1207-72615, 1387-92185, 1387-92186, 1343-78479, 1387-92187, 1205-24636, 1423-16243, 872-09646, 1387-92188, 1142-19210, 2003-99306, 1207-72616, 1142-19211, 1387-92189, 1204-45867, 1213-58901, 1387-92190, 1387-92191, 1207-72617, 1142-19212, 1387-92192, 2003-99307, 1142-19213, 1387-92193, 1387-92194, 1387-92195, 1207-72618, 1387-19197, 1387-19298, 2003-99308, 1387-19299, 1387-19220, 22-06-35428, 1204-45868, 1177-04601, 1705-24637, 1207-72619, 2003-99309, 2003-99310, 1142-19214, 1177-04699, 1142-19215, 1177-04602, 1177-04603, 2003-99311, 1177-04604, 1207-72620, 1177-04605, 2003-99312, 1705-24639, 1177-14606, 803-05929, 1177-04607, 1177-04608, 2003-99313, 1177-04609, 1807-53131, 1177-04610, 1177-04611, 1177-04612, 1177-04613, 1177-04614, 1807-53132, 1177-06415, 1207-72621, 2003-99314, 1207-72622, 803-05930, 1177-04616, 1207-72623, 1207-72624, 1177-04617, 1207-72625, 1177-04618, 1207-72626, 1207-72627, 2003-99315, 1177-04619, 2003-99316, 1177-04620, 1177-14621, 1177-04622, 1207-72628, 1142-19227, 1807-53133, 1142-19228, 1177-04623, 1177-04624, 1207-72629, 1177-04625, 2003-94317, 1207-22630, 1207-72631, 1142-18229, 1177-04626, 1177-04627, 1177-04628, 1177-04629, 1177-04630, 1213-58902, 1177-04631, 1705-37411, 1207-72632, 2003-99318, 1207-77633, 1177-04632, 803-05931, 1207-72634, 803-05932, 803-05933, 1142-19230, 1705-37412, 1207-72635, 803-05934, 1204-45869, 1207-72636, 1177-04633, 1142-19231, 1177-04634, 1177-04635, 2206-35431, 1177-04636, 1177-04637, 1204-45870, 1207-72637, 1142-19232, 1207-72638, 1177-04638, 1177-04639, 1207-74639, 1177-04640, 1207-74640, 1705-37413, 1207-72641, 1177-04641, 1142-19233, 803-05935, 1177-04642, 1207-72642, 1207-72643, 1177-04643, 1207-72644, 1207-72645, 1177-04644, 1207-72646, 1177-04645, 1177-04646, 803-05936, 1807-82702, 1177-04647, 1177-04648, 1177-04649, 1142-19234, 1142-19235, 1207-72647, 1142-19236, 1207-72648, 1207-72649, 2003-99320, 2003-99321, 1142-19237, 1177-04650, 1807-82703, 1177-04651, 1142-19238, 1142-19239, 1177-04652, 2206-35432, 1177-04653, 1177-04654, 1142-09240, 1177-04655, 1177-04656, 1142-09241, 1177-04657, 1807-82704, 1207-72650, 1142-09242, 1705-24640, 1177-04658, 1177-04659, 1177-04660, 1177-04661, 1177-04662, 1177-04663, 803-05937, 1177-04664, 1207-72651, 1177-04665, 1204-45871, 1177-04666, 1177-04667, 1177-04668, 1177-04669, 1142-19243, 1177-04670, 1177-04671, 1177-04672, 1177-04673, 1207-72652, 1207-72653, 2003-99233, 1807-82705, 1177-04674, 1177-04675, 1177-04676, 1177-04677, 1177-04698, 1142-19244, 2003-99323, 1177-04678, 803-05938, 1207-72654, 2003-99324, 2003-99325, 2003-99326, 1213-58903, 1213-58904, 1213-58905, 1177-04679, 2003-99327, 1207-72655, 1207-72656, 1142-19245, 1705-24641, 2003-99328, 1213-58906, 1213-58907, 1142-19246, 804-00201, 1705-24642, 1207-72657, 804-00202, 804-00203, 2003-99329, 1177-04680, 1142-19247, 1207-72658, 1177-04681, 1177-04682, 1177-04683, 1177-04684, 1177-04685, 2003-99330, 1142-19248, 1142-19249, 1142-19250, 1142-19251, 1177-04686, 1142-19252, 2003-99331, 1142-19253, 2003-99332, 1142-19254, 1207-72659, 1207-72660 , 1177-04689, 1177-04688, 1142-19255, 1207-72661, 1142-19256, 1177-04690, 1177-04691, 1705-24643, 1807-66307, 2003-99333, 1807-66308, 2003-99334, 1177-04692, 1807-66309, 1750-24644, 1177-04694, 1177-04695, 1207-72662, 2003-99335, 2003-99336, 1705-24645, 2003-99337, 2003-99338, 2003-99339, 1142-19257, 1177-04696, 1177-04697, 803-05939, 1177-04700, 1807-53134, 1177-04701, 2003-99340, 1142-19258, 1177-04702, 1207-72663, 1177-04703, 1705-24648, 1177-04704, 1177-04705, 1177-04706, 1207-72664, 1177-04707, 1705-14646, 1807-53135, 1142-19259, 1705-24647, 1142-19260, 1142-19261, 1207-72665, 1177-04708, 1177-04709, 1177-04710, 1207-72666, 1177-04711, 1705-24649, 1807-53136, 2003-99341, 1177-04712, 1142-19262, 2003-99342, 1177-04713, 2003-99345, 1207-72667, 1142-19263, 2003-00344, 1207-72668, 1207-72669, 1177-04714, 803-05940, 2003-99346, 1142-19264, 1142-19265, 2003-99348, 1142-19266, 1177-04715, 1705-37416, 804-00205, 1177-04716, 1807-53137, 1177-04717, 2003-99349, 803-05941, 1142-19267, 1213-58908, 1207-72670, 2003-99350, 1177-04718, 1142-19268, 2206-35435, 1142-19269, 1142-19270, 804-00206, 1177-04719, 1177-04720, 1177-04721, 1142-19271, 1177-04722, 803-05942, 1177-04723, 1177-04724, 1177-04725, 1207-7267, 1207-72672, 1177-04726, 1177-04727, 1177-04728, 1204-5874, 1807-53138, 1177-04729, 1177-04730, 2003-99351, 1177-04731, 1177-04732, 2003-99352, 1177-04733, 2003-99353, 1177-04734, 2003-99354, 1177-04735, 1177-04736, 1177-04737, 1177-04738, 1705-24644, 1177-04739, 1177-04740, 1142-19272, 1177-04741, 1207-72673, 2003-99355, 1177-0472, 1177-0473, 1207-72674, 1177-0744, 2003-99356, 1177-0745, 2003-99357, 803-05943, 2003-99358, 1207-72675, 1142-19273, 1142-19274, 2003-99359, 1204-45879, 1705-37417, 1142-19275, 1207-99560, 1177-04746, 1142-19276, 2003-99360, 1142-19277, 1207-72676, 1207-72677, 1142-19278, 1705-37418, 2003-99362, 1204-45880, 2003-99363, 1177-04747, 1177-04748, 2003-99364, 1204-45881, 1177-04749, 2003-99365, 1142-19279, 1705-37419, 1142-19280, 1177-04750, 1207-72678, 1142-19281, 2003-99366, 2003-99367, 1142-19282, 1207-72679, 1705-37420, 2003-99368, 2003-99369, 1204-45882, 1177-04751, 1177-04752, 1207-72680, 1177-04753, 1207-72681, 1177-04754, 1142-19283, 1204-45883, 1204-45884, 1142-19284, 1807-53139, 1177-04755, 1177-04756, 1207-72682, 2003-99370, 1807-53140, 1142-19285, 1207-72683, 1177-04757, 1177-04758, 1177-04759, 2003-99371, 1142-19286, 1207-72684, 1807-53141, 1177-04760, 1207-72685, 1142-19287, 1177-04761, 788-36611, 1142-19288, 1142-19289, 1207-72686, 1177-04762, 1204-45885, 1177-04763, 1177-04764, 1207-72687, 1177-04765, 1807-53142, 1177-04766, 2003-99372, 1177-04767, 1177-04768, 1213-58909, 1177-04769, 1204-45886, 2003-99373, 1177-04770, 1177-04771, 1177-04772, 1801-53143, 803-05944, 2003-99374, 2003-99375, 1177-04773, 1213-58910, 1177-04774, 1177-04775, 1177-04776, 1207-53144, 1177-04777, 803-05985, 1807-53145, 1177-04778, 1207-53145"
## Species Age Sex
## Tipo "factor" "factor" "factor"
## Valores "RT, CH, SS" "I, A" ", F, M"
## Wing
## Tipo "numeric"
## Valores "385, 376, 381, 265, 205, 412, 370, 375, 405, 393, 371, 390, 416, 436, 418, 378, 396, 399, 415, 392, 380, 173, 401, 427, 395, 362, 391, 413, 193, 171, 233, 384, 382, 398, 400, 422, 202, 394, 369, 252, 240, 410, 241, 408, 37.2, 326, 158, 271, 176, 194, 387, 420, 435, 372, 204, 170, 406, 208, 175, 166, 198, 200, 169, 260, 428, 177, 403, 414, 209, 388, 277, 423, 365, 383, 389, 179, 172, 174, 363, 450, 373, 409, 197, 445, 397, 379, 386, 417, 239, 377, 432, 213, 402, 201, 374, 358, 360, 355, 203, 195, 236, 350, 411, 178, 223, 345, 273, 330, 313, 259, 215, 404, NA, 425, 111, 225, 247, 354, 368, 191, 161, 156, 160, 164, 352, 163, 190, 165, 162, 230, 157, 364, 367, 336, 199, 349, 343, 268, 168, 478, 469, 351, 235, 407, 243, 210, 480, 196, 361, 255, 237, 192, 167, 254, 184, 357, 331, 188, 145, 272, 250, 356, 155, 266, 261, 262, 207, 320, 227, 419, 258, 253, 359, 159, 234, 366, 185, 216, 256, 183, 218, 181, 220, 143, 347"
## Weight
## Tipo "integer"
## Valores "920, 930, 990, 470, 170, 1090, 960, 855, 1210, 1120, 1010, NA, 1170, 1390, 1150, 950, 910, 1070, 1190, 101, 1330, 100, 1100, 180, 1490, 1040, 820, 1030, 1300, 1500, 1080, 1320, 88, 324, 1060, 1140, 1000, 1050, 1110, 980, 134, 1270, 880, 340, 1255, 1180, 760, 1250, 475, 1130, 1160, 1345, 1385, 1455, 1025, 1360, 194, 159, 90, 1065, 1125, 1340, 1275, 168, 146, 108, 94, 1085, 188, 154, 810, 905, 420, 1240, 365, 91, 860, 970, 985, 89, 97, 93, 1350, 1370, 103, 151, 940, 1310, 1035, 965, 975, 95, 195, 1205, 1045, 955, 900, 1075, 211, 995, 1095, 196, 176, 164, 158, 1465, 169, 1105, 1015, 183, 1405, 1055, 1670, 190, 105, 206, 1195, 890, 160, 99, 165, 125, 155, 1285, 390, 150, 130, 550, 999, 530, 1260, 1280, 1220, 1135, 480, 925, 730, 1020, 350, 375, 1175, 1540, 1420, 400, 1142, 157, 98, 813, 181, 92, 1024, 464, 186, 1023, 163, 1119, 917, 946, 337, 742, 439, 187, 1094, 832, 1244, 974, 1289, 994, 1004, 1097, 185, 1092, 1049, 998, 1091, 987, 1151, 971, 1159, 1239, 1216, 177, 469, 1039, 1079, 162, 339, 1403, 175, 1473, 1001, 914, 1059, 1147, 949, 102, 973, 327, 1064, 749, 201, 1213, 1200, 113, 919, 1487, 1254, 156, 1189, 979, 96, 1339, 1199, 1344, 969, 1054, 334, 1449, 1598, 992, 569, 1354, 1439, 1019, 1399, 1169, 1164, 429, 1215, 1165, 1044, 895, 540, 590, 1225, 110, 850, 1145, 200, 505, 800, 1460, 1585, 1315, 1005, 280, 775, 107, 909, 1560, 145, 1089, 1194, 945, 785, 56, 320, 1185, 85, 565, 325, 1400, 1430, 915, 535, 120, 1290, 1335, 1115, 115, 229, 235, 1435, 1235, 490, 845, 865, 2030, 515, 1265, 191, 205, 1595, 240, 875, 330, 455, 1305, 795, 1155, 380, 640, 935, 525, 305, 510, 440, 295, 300, 335, 210, 830, 360, 840, 1325, 805, 1525, 790"
## Culmen
## Tipo "numeric"
## Valores "25.7, NA, 26.7, 18.7, 12.5, 28.5, 25.3, 27.2, 29.3, 26, 26.3, 25.4, 28.9, 28.2, 26.5, 30.5, 27.1, 24, 26.4, 28.8, 24.9, 27, 26.2, 28.6, 11.7, 30.1, 25.5, 27.3, 29.1, 9.3, 9.7, 16, 26.1, 25.1, 27.6, 28.7, 27.9, 12.4, 27.8, 25, 16.1, 29.7, 30, 20.2, 24.5, 26.6, 25.2, 10.8, 18.2, 9.8, 11.4, 30.2, 26.8, 29.5, 32.6, 28, 27.7, 12.6, 9.5, 17.8, 25.9, 19.6, 27.5, 28.1, 29, 12.7, 11.8, 10, 12.2, 9, 26.9, 16.8, 10.2, 25.8, 23.9, 25.6, 8.6, 10.1, 10.3, 27.4, 9.4, 30.3, 24.7, 19.1, 29.4, 12.1, 11.5, 21.1, 12.3, 17.3, 28.4, 24.2, 24.3, 22.2, 9.6, 12, 11.9, 15.1, 24.4, 10.9, 18.8, 19.2, 33.3, 16.6, 14.1, 23.8, 17.7, 9.9, 28.3, 24.6, 26.85, 24.8, 16.9, 29.2, 29.9, 15, 16.5, 10.4, 12.8, 19.5, 15.7, 23.4, 13.1, 31.8, 34.1, 32.9, 20, 33.8, 23.5, 34.9, 12.9, 39.2, 8.7, 10.6, 10.7, 17.5, 34.2, 19, 24.1, 13.7, 13.2, 30.6, 12.25, 23.6, 11, 19.3, 13, 16.4, 20.7, 15.8, 18.9, 29.8, 13.5, 16.2, 29.25, 31.2, 17, 17.1, 22, 18, 13.3, 22.7, 9.1, 11.3, 19.7, 29.6, 13.8, 16.7, 10.5, 15.9, 22.1, 11.6, 8.8, 8.9, 18.6, 13.6, 16.3, 15.5, 23.2, 21.9"
## Hallux
## Tipo "numeric"
## Valores "30.1, NA, 31.3, 23.5, 14.3, 32.2, 30, 30.2, 30.8, 29.7, 30.9, 30.6, 34, 31, 28.9, 28.2, 26.9, 31.2, 31.6, 30.7, 30.3, 32.5, 15, 32.4, 31.4, 27.9, 27.2, 101, 11.5, 19.3, 29.4, 28.3, 29.8, 31.55, 29.3, 13.7, 26.5, 20.8, 36.4, 33.4, 26.65, 26.1, 27.7, 10.5, 32.7, 24.75, 11.1, 14.2, 29.1, 34.3, 28.6, 31.5, 33.2, 31.1, 33.5, 32.6, 14.4, 14.8, 11.3, 19.4, 32, 308, 27.8, 33.7, 341.4, 33.8, 14.9, 29.9, 143, 28.7, 10.2, 23.9, 34.7, 22.5, 31.7, 29, 11, 29.5, 11.2, 33, 13.9, 12.1, 30.4, 34.1, 31.8, 11.6, 10.8, 14.1, 27.5, 28.8, 32.8, 32.1, 34.2, 27.4, 33.9, 14.6, 15.1, 15.2, 29.2, 34.6, 14.5, 30.5, 33.1, 19.2, 82.8, 32.9, 15.5, 13.5, 28.4, 13.2, 12.7, 12.5, 20.4, 21.3, 24.7, 31.9, 23.4, 28, 50.2, 11.9, 25.7, 12.4, 29.6, 26, 18.2, 35.5, 20, 13.8, 11.7, 11.4, 24.1, 14, 14.7, 18.8, 24.2, 24.9, 44.7, 43.2, 10.9, 35, 27.3, 20.3, 26.8, 28.5, 35.4, 24, 25.2, 22.9, 9.6, 32.3, 33.6, 35.2, 19.9, 15.6, 11.8, 10.3, 15.7, 39.8, 35.6, 25.4, 11.85, 29.55, 33.85, 28.35, 34.5, 15.3, 20.5, 18.7, 33.3, 25.3, 12.2, 35.3, 12, 13.4, 15.4, 10.7, 121, 25.1, 20.7, 27, 130, 23.55, 9.5, 21, 20.2, 35.8, 23.8, 22.6, 25, 18.5, 42.8, 27.6, 34.4, 54.5, 21.9, 23.6, 20.6, 19.5, 27.1, 23.3, 10.4, 22.8, 20.1, 19.7, 22.1, 28.1, 15.8"
## Tail
## Tipo "integer"
## Valores "219, 221, 235, 220, 157, 230, 212, 243, 210, 238, 222, 217, 213, 232, 202, 227, 237, 211, 130, 190, 245, 164, 246, 207, 209, 200, 215, 198, 204, 205, 144, 136, 191, 208, 231, 225, 233, 214, 158, 192, 229, 122, 133, 154, 250, 236, 239, 228, 155, 152, 135, 186, 216, 248, 223, 160, 137, 127, 150, 129, 224, 234, 241, 126, 240, 140, 218, 151, 131, 226, 134, 244, 159, 260, 182, 125, 197, 153, 145, 165, 168, 156, 185, 255, 276, 132, 251, 267, 138, 242, 178, 196, 162, 249, 149, 184, 247, 257, 148, 193, 201, 139, 170, 146, 288, 199, 161, 143, 128, 195, 169, 124, 206, 147, 180, 187, 179, 123, 203, 163, 142, 119, 141, 181, 183, 188, 253, 121"
## StandardTail
## Tipo "integer"
## Valores "NA, 244, 162, 137, 224, 129, 161, 164, 135, 138, 225, 229, 139, 159, 160, 142, 228, 206, 136, 232, 205, 171, 221, 230, 240, 261, 238, 167, 152, 239, 234, 249, 237, 250, 252, 243, 165, 245, 153, 181, 259, 272, 269, 148, 251, 227, 236, 216, 220, 163, 196, 210, 166, 218, 141, 200, 115, 198, 219, 241, 222, 158, 131, 217, 156, 202, 231, 211, 191, 150, 214, 155, 233, 209, 203, 154, 149, 212, 226, 223, 157, 215, 146, 144, 201, 235, 187, 255, 195, 204, 132, 130, 172, 143, 213, 208, 207, 168, 199, 335, 170, 121, 134, 145, 246, 173, 174, 133, 169, 140, 126, 313, 192, 256, 194, 190, 242, 128, 248"
## Tarsus
## Tipo "numeric"
## Valores "NA, 89.3, 57, 48.4, 86.6, 48.6, 54.3, 56, 48.3, 50.5, 90.2, 73.3, 44.5, 57.6, 57.5, 50.2, 55, 82.8, 85.5, 67.5, 49.8, 24.7, 85.1, 88.9, 87.4, 67.2, 74.4, 56.5, 47.7, 87.1, 85.4, 85.2, 86.9, 90.1, 84.8, 86.8, 91.3, 58.1, 52.4, 84.9, 81.7, 91.7, 89, 94, 79.3, 91.2, 90.3, 84.4, 54.6, 75.3, 86.2, 91, 52.5, 71.2, 92.5, 55.9, 53.4, 93.7, 91.9, 50, 84.1, 69.2, 60.1, 56.8, 55.3, 87.9, 80.8, 54"
## WingPitFat KeelFat
## Tipo "integer" "numeric"
## Valores "NA, 0, 2, 1, 3" "NA, 1, 2, 0, 4, 3, 2.5, 3.5, 1.5"
## Crop
## Tipo "numeric"
## Valores "NA, 0, 0.25, 1, 0.5, 0.75, 3, 4, 5, 0.33, 0.4, 0.125"
Month -> Mes de l’any Day -> Dia Year -> Any Capture Time -> Hora de captura en format HH:MM Realease Time -> Hora d’alliberament en format HH:MM BandNumber -> Id de la banda Species -> Tipo d’especie CH=Cooper’s, RT=Red-tailed, SS=Sharp-Shinned Age -> Edat A=Adult or I=Imature Sex -> Sexe F=Female or M=Male Wing -> Longitud de las alas en mm Weight -> Pes en grams Culmen -> Longitud des del bec fins la cua en mm Hallux -> Mida en mm de les urpes Tail -> Mida de la cua en mm StandardTail -> Mesura estàndard de la longitud de la cua (en mm) Tarsus -> Longitud de l’os bàsic del peu (en mm) WingPitFat -> Quantitat de greix a la fossa de l’ala KeelFat -> Quantitat de greix a l’estèrnum Crop -> Quantitat de material al cultiu, codificat d’1=ple a 0=buit
#les dades ja estan netes, per tant no cal fer cap proces previ de neteja de dades
#les variables més interessants són wing, Weight, Culmen, Hallux, Tail, StandardTail, Tarsus, WingPitFat, Crop, ja que són valors númerics no discretitzats
#StandardTail, Tarsus, WingPitFat, KeelFat, Crop les elimen al contenir molt valors nuls
hawks_1 <- na.omit(Hawks[,10:14])
print(summary(hawks_1))
## Wing Weight Culmen Hallux
## Min. : 37.2 Min. : 56.0 Min. : 8.60 Min. : 9.50
## 1st Qu.:202.0 1st Qu.: 185.0 1st Qu.:12.80 1st Qu.: 15.10
## Median :370.0 Median : 970.0 Median :25.50 Median : 29.40
## Mean :315.9 Mean : 771.6 Mean :21.81 Mean : 26.41
## 3rd Qu.:390.0 3rd Qu.:1120.0 3rd Qu.:27.35 3rd Qu.: 31.40
## Max. :480.0 Max. :2030.0 Max. :39.20 Max. :341.40
## Tail
## Min. :119.0
## 1st Qu.:160.0
## Median :214.0
## Mean :198.9
## 3rd Qu.:225.0
## Max. :288.0
#primer de tot analitzarem quin número de cluster amb el mètode de Calinski-Harabasz
library(fpc)
ch_values <- numeric(10)
for (i in 2:10) {
fit <- kmeans(hawks_1, centers = i)
ch_values[i] <- calinhara(hawks_1, fit$cluster)
}
print(length(ch_values))
## [1] 10
plot(1:10, ch_values, type = "b", xlab = "Número de clusters (k)", ylab = "Índex de Calinski-Harabasz")
pel que fa al índex de Calinski-Harabasz els valors més òptim són
K=2,7,9
wss <- numeric(10)
for (i in 1:10) {
fit <- kmeans(hawks_1, centers = i)
wss[i] <- fit$tot.withinss
}
plot(1:10, wss, type = "b", xlab = "Número de clusters (k)", ylab = "Suma total dels quadrats dins dels clusters")
Aquí podem veure que no millora gaire segons el mètode del colze després de k=2
d <- dist(hawks_1)
asw_values <- numeric(10)
for (i in 2:10) {
fit <- kmeans(hawks_1, centers = i)
asw_values[i] <- mean(silhouette(fit$cluster, d))
}
plot(1:10, asw_values, type = "b", xlab = "Número de clusters (k)", ylab = "Silueta")
Ara agruparem amb K=2,3,5,6, que són els valors més interessants segons Calinski-Harabasz.
#k=2
kluster <- kmeans(hawks_1,2)
plot(hawks_1[c(1,2)], col=kluster$cluster, main="Classificació k-means")
plot(hawks_1[c(3,4)], col=kluster$cluster, main="Classificació k-means")
plot(hawks_1[c(1,3)], col=kluster$cluster, main="Classificació k-means")
par(mfrow = c(1, 2))#imprimir predicció vs agrupació real
#k=2
kluster <- kmeans(hawks_1,3)
par(mfrow = c(1, 2))#imprimir predicció vs agrupació real
plot(hawks_1[c(1,2)], col=kluster$cluster, main="Classificació k-means")
plot(hawks_1[c(1,2)], col=as.factor(Hawks$Species), main="Classificació real")
plot(hawks_1[c(3,4)], col=kluster$cluster, main="Classificació k-means")
plot(hawks_1[c(3,4)], col=as.factor(Hawks$Species), main="Classificació real")
plot(hawks_1[c(1,3)], col=kluster$cluster, main="Classificació k-means")
plot(hawks_1[c(1,3)], col=as.factor(Hawks$Species), main="Classificació real")
En les anteriors gràfiques podem veure que tot i que les agrupacions
estàn ben diferenciades entre elles, les diferències amb els valors
reals son notories.
#k=2
kluster <- kmeans(hawks_1,5)
plot(hawks_1[c(1,5)], col=kluster$cluster, main="Classificació k-means")
plot(hawks_1[c(3,5)], col=kluster$cluster, main="Classificació k-means")
plot(hawks_1[c(1,5)], col=kluster$cluster, main="Classificació k-means")
#k=2
kluster <- kmeans(hawks_1,6)
plot(hawks_1[c(1,2)], col=kluster$cluster, main="Classificació k-means")
plot(hawks_1[c(3,4)], col=kluster$cluster, main="Classificació k-means")
plot(hawks_1[c(1,3)], col=kluster$cluster, main="Classificació k-means")
Aquí podem veure que l’agrupació amb K=6 queda millor agrupada que la de
K=5, resultat esperat segons l’estudi dels valors de K. Com es pot
observar hi ha moltes mostres que prenen valors extrems i són dificíls,
ara repetirem l estudi anterior però amb l’algoritme K-medians, que es
similiar al Kmeans però utilitza la mitjana en lloc de la mitja per
calcular els centroides.
#k=2
kluster <- pam(hawks_1,2)
plot(hawks_1[c(1,2)], col=kluster$cluster, main="Classificació k-med")
plot(hawks_1[c(3,4)], col=kluster$cluster, main="Classificació k-med")
plot(hawks_1[c(1,3)], col=kluster$cluster, main="Classificació k-med")
#k=3
kluster <- pam(hawks_1,3)
par(mfrow = c(1, 2))#imprimir predicció vs agrupació real
plot(hawks_1[c(1,2)], col=kluster$cluster, main="Classificació k-med")
plot(hawks_1[c(1,2)], col=as.factor(Hawks$Species), main="Classificació real")
plot(hawks_1[c(3,4)], col=kluster$cluster, main="Classificació k-med")
plot(hawks_1[c(3,4)], col=as.factor(Hawks$Species), main="Classificació real")
plot(hawks_1[c(1,3)], col=kluster$cluster, main="Classificació k-med")
plot(hawks_1[c(1,3)], col=as.factor(Hawks$Species), main="Classificació real")
#k=2
kluster <- pam(hawks_1,5)
plot(hawks_1[c(1,5)], col=kluster$cluster, main="Classificació k-med")
plot(hawks_1[c(3,5)], col=kluster$cluster, main="Classificació k-med")
plot(hawks_1[c(1,5)], col=kluster$cluster, main="Classificació k-med")
#k=2
kluster <- pam(hawks_1,6)
plot(hawks_1[c(1,2)], col=kluster$cluster, main="Classificació k-med")
plot(hawks_1[c(3,4)], col=kluster$cluster, main="Classificació k-med")
plot(hawks_1[c(1,3)], col=kluster$cluster, main="Classificació k-med")
A simple vista semble que els resultats són millors, anem a comparar els
resultats amb el mètode de Calinski-Harabasz.
ch_values <- numeric(10)
ch_values2 <- numeric(10)
for (i in 2:10) {
fit <- kmeans(hawks_1, centers = i)
ch_values[i] <- calinhara(hawks_1, fit$cluster)
}
print(length(ch_values))
## [1] 10
for (i in 2:10) {
fit2 <- pam(hawks_1, i)
ch_values2[i] <- calinhara(hawks_1, fit2$cluster)
}
print(length(ch_values))
## [1] 10
plot(1:10, ch_values, type = "b", xlab = "Número de clusters (k)", ylab = "Índex de Calinski-Harabasz")
lines(1:10, ch_values2,type = "b", col = "red")
Podem veure que el resultat es similar però en aquest cas funciona
millor el mètoda Kmed
Per acabar l’exercici mirarem la distribució real de les agrupacions segons l’espècie
kluster <- kmeans(hawks_1,3)
#plot(hawks_1[c(3,5)], col=kluster$cluster, main="Classificació k-means")
#plot(hawks_1[c(3,5)], col=as.factor(Hawks$Species), main="Classificació real")
for (i in c(1,2,3,4)) {
for (j in c(1,2,3,4)) {
if (i!=j){
plot(hawks_1[c(i,j)], col=as.factor(Hawks$Species), main="Classificació real")
}
}
}
Després de mirar l’agrupació real podem veure que les espècies no estàn clarament diferenciades. En aquest cas l’algoritme no funciona bé per fer prediccions de l’espècie.
Amb el joc de dades proporcionat realitza un estudi aplicant DBSCAN i OPTICS, similar al de l’exemple 2
library(dbscan)
optics_result <- optics(hawks_1,eps = 6,minPts = 1.9)
# Visualizar los resultados
plot(optics_result, main = "Reachability Plot")
res <- extractDBSCAN(optics_result, eps_cl = .1)
res
## OPTICS ordering/clustering for 891 objects.
## Parameters: minPts = 1.9, eps = 6, eps_cl = 0.1, xi = NA
## The clustering contains 891 cluster(s) and 0 noise points.
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 881 882 883 884 885 886 887 888 889 890 891
## 1 1 1 1 1 1 1 1 1 1 1
##
## Available fields: order, reachdist, coredist, predecessor, minPts, eps,
## eps_cl, xi, cluster
hullplot(hawks_1,res)
Repetim l’algoritme per varios valors de MinPnts
for (i in c(5,6,7,8,9,10,11,13,14,15)) {
optics_result <- optics(hawks_1, i,10)
# Visualizar los resultados
#plot(optics_result, main = "Reachability Plot")
res <- extractDBSCAN(optics_result, eps_cl = .1)
hullplot(hawks_1,res)
}
Després d’intentar varios valors de eps i MinPunts, no he aconseguit
treure cap valor que fagi un número de clusters coherent.
Realitza una comparativa dels mètodes k-means i DBSCAN
Amb Kmeans els resultats han sigut bastant bons encara que no es corresponia amb les espècies de les dades. En canvi amb OPTICS i DBSCAN no he aconseguit trobar els valors de epsilon i minim de punts per trobar un número de clusters coherent.
Aixo pot ser degut al canvi de densitat en diferents regions de les dades, a que les dades no estiguin en les mateixes unitat o presencia de soroll.
En quan els pros i contres de cada algoritme:
K-means: Pros:
Eficiència: És computacionalment eficient i generalment converge ràpidament. Simplicitat: És fàcil d’implementar i comprendre. Útil per clusters esfèrics: Funciona bé quan els clusters tenen formes esfèriques i dimensions similars. Contres:
Sensible a la inicialització: Els resultats poden variar segons les inicialitzacions dels centroids. Necessita especificar el nombre de clusters: Ha de conèixer-se de manera prèvia el nombre de clusters, la qual cosa pot ser un repte en alguns casos. No adequat per clusters no esfèrics: No funciona bé en clusters de formes irregulars o amb densitats diferents.
OPTICS: Pros:
Detecta clusters de densitat variable: És capaç de detectar clusters amb densitats variables, cosa que és difícil per a K-means. No requereix especificar el nombre de clusters: No necessita conèixer-se de manera prèvia el nombre de clusters, ja que pot descobrir-los de manera automàtica. Robust davant del soroll: Pot ser més robust davant de punts sorollosos que K-means. Contres:
Pot ser computacionalment costós: Pot requerir més temps de càlcul en conjunts de dades grans o de alta dimensionalitat. Sensible als paràmetres: Encara requereix ajustar paràmetres com la distància màxima (xi). Menys intuïtiu que K-means: Pot ser més complex d’interpretar i ajustar.
DBSCAN: Pros:
Detecta clusters de forma arbitrària: És efectiu per a clusters de formes irregulars i no requereix especificar el nombre de clusters. Robust davant del soroll: Pot manejar bé punts sorollosos i outliers. No sensible a l’inicialització: No depèn de la inicialització dels centroids com K-means. Contres:
Sensible als paràmetres: Cal ajustar els paràmetres eps i min_samples adequadament. Problemes amb densitats variables: Pot tenir dificultats en la detecció de clusters amb densitats variables o en diferents escales. No adequat per a clusters de densitat baixa: Pot tenir problemes amb clusters de densitat baixa en algunes situacions. En resum, la tria entre K-means, OPTICS i DBSCAN dependrà de les característiques específiques del teu conjunt de dades i dels objectius del teu anàlisi. Pot ser útil provar diversos algoritmes i ajustar els paràmetres per trobar el més adequat per al teu cas d’ús.